home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet multimedia / Muzyka / Edytory sampli (probek dzwieku) / ZynAddSubFX_2.2.0 / Setup_ZynAddSubFX-2.2.0.exe / source code / UI / ResonanceUI.fl < prev    next >
Text File  |  2005-03-14  |  11KB  |  393 lines

  1. # data file for the Fltk User Interface Designer (fluid)
  2. version 1.0106 
  3. header_name {.h} 
  4. code_name {.cc}
  5. decl {//Copyright (c) 2002-2005 Nasca Octavian Paul} {} 
  6.  
  7. decl {//License: GNU GPL version 2} {} 
  8.  
  9. decl {\#include <FL/Fl_Box.H>} {public
  10.  
  11. decl {\#include <FL/fl_draw.H>} {public
  12.  
  13. decl {\#include <FL/Fl_Value_Output.H>} {public
  14.  
  15. decl {\#include <math.h>} {} 
  16.  
  17. decl {\#include <stdio.h>} {} 
  18.  
  19. decl {\#include <stdlib.h>} {} 
  20.  
  21. decl {\#include <string.h>} {} 
  22.  
  23. decl {\#include "../Synth/Resonance.h"} {public
  24.  
  25. decl {\#include "WidgetPDial.h"} {public
  26.  
  27. decl {\#include "PresetsUI.h"} {public
  28.  
  29. class ResonanceGraph {: {public Fl_Box}
  30. } {
  31.   Function {ResonanceGraph(int x,int y, int w, int h, const char *label=0):Fl_Box(x,y,w,h,label)} {} {
  32.     code {respar=NULL;
  33. cbwidget=NULL;
  34. applybutton=NULL;} {}
  35.   }
  36.   Function {init(Resonance *respar_,Fl_Value_Output *khzvalue_,Fl_Value_Output *dbvalue_)} {} {
  37.     code {respar=respar_;
  38. khzvalue=khzvalue_;
  39. dbvalue=dbvalue_;
  40. oldx=-1;
  41. khzval=-1;} {}
  42.   }
  43.   Function {draw_freq_line(REALTYPE freq,int type)} {} {
  44.     code {REALTYPE freqx=respar->getfreqpos(freq);
  45. switch(type){
  46.   case 0:fl_line_style(FL_SOLID);break;
  47.   case 1:fl_line_style(FL_DOT);break;
  48.   case 2:fl_line_style(FL_DASH);break;
  49. }; 
  50.  
  51.  
  52. if ((freqx>0.0)&&(freqx<1.0))
  53.    fl_line(x()+(int) (freqx*w()),y(),
  54.    x()+(int) (freqx*w()),y()+h());} {}
  55.   }
  56.   Function {draw()} {} {
  57.     code {int ox=x(),oy=y(),lx=w(),ly=h(),i,ix,iy,oiy;
  58. REALTYPE freqx;
  59.  
  60. fl_color(FL_BLACK);
  61. fl_rectf(ox,oy,lx,ly);
  62.  
  63.  
  64. //draw the lines
  65. fl_color(FL_GRAY);
  66.  
  67. fl_line_style(FL_SOLID);
  68. fl_line(ox+2,oy+ly/2,ox+lx-2,oy+ly/2);
  69.  
  70. freqx=respar->getfreqpos(1000.0);
  71. if ((freqx>0.0)&&(freqx<1.0))
  72.    fl_line(ox+(int) (freqx*lx),oy,
  73.     ox+(int) (freqx*lx),oy+ly);
  74.  
  75. for (i=1;i<10;i++){
  76.    if(i==1){
  77.      draw_freq_line(i*100.0,0);
  78.      draw_freq_line(i*1000.0,0);
  79.    }else 
  80.     if (i==5){
  81.       draw_freq_line(i*100.0,2);
  82.       draw_freq_line(i*1000.0,2);
  83.     }else{
  84.       draw_freq_line(i*100.0,1);
  85.       draw_freq_line(i*1000.0,1);
  86.     };
  87. };
  88.  
  89. draw_freq_line(10000.0,0);
  90. draw_freq_line(20000.0,1);
  91.  
  92. fl_line_style(FL_DOT);
  93. int GY=10;if (ly<GY*3) GY=-1;
  94. for (i=1;i<GY;i++){
  95.    int tmp=(int)(ly/(REALTYPE)GY*i);
  96.    fl_line(ox+2,oy+tmp,ox+lx-2,oy+tmp);
  97. };
  98.  
  99.  
  100.  
  101. //draw the data
  102. fl_color(FL_RED);
  103. fl_line_style(FL_SOLID);
  104. oiy=(int)(respar->Prespoints[0]/128.0*ly);
  105. for (i=1;i<N_RES_POINTS;i++){
  106.    ix=(int)(i*1.0/N_RES_POINTS*lx);
  107.    iy=(int)(respar->Prespoints[i]/128.0*ly);
  108.    fl_line(ox+ix-1,oy+ly-oiy,ox+ix,oy+ly-iy);
  109.    oiy=iy;
  110. };} {}
  111.   }
  112.   Function {handle(int event)} {return_type int
  113.   } {
  114.     code {int x_=Fl::event_x()-x();
  115. int y_=Fl::event_y()-y();
  116. if ( (x_>=0)&&(x_<w()) && (y_>=0)&&(y_<h())){
  117.    khzvalue->value(respar->getfreqx(x_*1.0/w())/1000.0);
  118.    dbvalue->value((1.0-y_*2.0/h())*respar->PmaxdB);
  119. };
  120.  
  121. if ((event==FL_PUSH)||(event==FL_DRAG)){
  122.   int leftbutton=1;
  123.   if (Fl::event_button()==FL_RIGHT_MOUSE) leftbutton=0;
  124.   if (x_<0) x_=0;if (y_<0) y_=0;
  125.   if (x_>=w()) x_=w();if (y_>=h()-1) y_=h()-1;
  126.  
  127.   if ((oldx<0)||(oldx==x_)){
  128.     int sn=(int)(x_*1.0/w()*N_RES_POINTS);
  129.     int sp=127-(int)(y_*1.0/h()*127);
  130.     if (leftbutton!=0) respar->setpoint(sn,sp);
  131.         else respar->setpoint(sn,64);
  132.   } else {
  133.     int x1=oldx;
  134.     int x2=x_;
  135.     int y1=oldy;
  136.     int y2=y_;
  137.     if (oldx>x_){
  138.       x1=x_;y1=y_;
  139.       x2=oldx;y2=oldy;
  140.     };
  141.    for (int i=0;i<x2-x1;i++){
  142.       int sn=(int)((i+x1)*1.0/w()*N_RES_POINTS);
  143.       REALTYPE yy=(y2-y1)*1.0/(x2-x1)*i;
  144.       int sp=127-(int)((y1+yy)/h()*127);
  145.       if (leftbutton!=0) respar->setpoint(sn,sp);
  146.          else respar->setpoint(sn,64);
  147.     };
  148.   };
  149.  
  150.   oldx=x_;oldy=y_;
  151.   redraw();
  152. };
  153.  
  154. if (event==FL_RELEASE) {
  155.     oldx=-1;
  156.     if (cbwidget!=NULL) {
  157.         cbwidget->do_callback();
  158.         if (applybutton!=NULL) {
  159.             applybutton->color(FL_RED);
  160.             applybutton->redraw();
  161.  
  162.         };
  163.     };
  164. };
  165.  
  166. return(1);} {selected
  167.     }
  168.   }
  169.   Function {setcbwidget(Fl_Widget *cbwidget,Fl_Widget *applybutton)} {} {
  170.     code {this->cbwidget=cbwidget;
  171. this->applybutton=applybutton;} {}
  172.   }
  173.   decl {Fl_Value_Output *khzvalue;} {}
  174.   decl {Fl_Value_Output *dbvalue;} {}
  175.   decl {Resonance *respar;} {}
  176.   decl {int oldx,oldy;} {}
  177.   decl {REALTYPE khzval;} {public
  178.   }
  179.   decl {Fl_Widget *cbwidget,*applybutton;} {}
  180.  
  181. class ResonanceUI {: PresetsUI_
  182. } {
  183.   Function {make_window()} {} {
  184.     Fl_Window resonancewindow {
  185.       label Resonance
  186.       xywh {45 259 780 305} type Double visible
  187.     } {
  188.       Fl_Value_Output khzvalue {
  189.         label kHz
  190.         xywh {415 264 45 18} align 8 minimum 0.001 maximum 48 step 0.01 textfont 1
  191.         code0 {//this widget must be before the calling widgets}
  192.       }
  193.       Fl_Value_Output dbvalue {
  194.         label dB
  195.         xywh {415 282 45 18} align 8 minimum -150 maximum 150 step 0.1 textfont 1
  196.         code0 {//this widget must be before the calling widgets}
  197.       }
  198.       Fl_Group {} {
  199.         xywh {6 5 768 256} box BORDER_BOX
  200.         code0 {rg=new ResonanceGraph(o->x(),o->y(),o->w(),o->h(),"");}
  201.         code1 {rg->init(respar,khzvalue,dbvalue);}
  202.         code2 {rg->show();}
  203.       } {}
  204.       Fl_Button {} {
  205.         label Close
  206.         callback {resonancewindow->hide();}
  207.         xywh {690 283 84 17} box THIN_UP_BOX
  208.       }
  209.       Fl_Button {} {
  210.         label Zero
  211.         callback {for (int i=0;i<N_RES_POINTS;i++) 
  212.    respar->setpoint(i,64);
  213. resonancewindow->redraw();
  214. redrawPADnoteApply();}
  215.         tooltip {Clear the resonance function} xywh {491 264 66 15} box THIN_UP_BOX labelfont 1
  216.       }
  217.       Fl_Button {} {
  218.         label Smooth
  219.         callback {respar->smooth();
  220. resonancewindow->redraw();
  221. redrawPADnoteApply();}
  222.         tooltip {Smooth the resonance function} xywh {491 282 66 18} box THIN_UP_BOX labelfont 1
  223.       }
  224.       Fl_Check_Button enabled {
  225.         label Enable
  226.         callback {respar->Penabled=(int) o->value();
  227. redrawPADnoteApply();}
  228.         xywh {6 270 78 27} box THIN_UP_BOX down_box DOWN_BOX
  229.         code0 {o->value(respar->Penabled);}
  230.       }
  231.       Fl_Roller maxdb {
  232.         callback {maxdbvo->value(o->value());
  233. respar->PmaxdB=(int) o->value();
  234. redrawPADnoteApply();}
  235.         xywh {90 282 84 15} type Horizontal minimum 1 maximum 90 step 1 value 30
  236.       }
  237.       Fl_Value_Output maxdbvo {
  238.         label {Max.}
  239.         callback {o->value(respar->PmaxdB);}
  240.         tooltip {The Maximum amplitude (dB)} xywh {126 264 24 18} minimum 1 maximum 127 step 1 value 30 textfont 1
  241.         code0 {o->value(respar->PmaxdB);}
  242.       }
  243.       Fl_Box {} {
  244.         label dB
  245.         xywh {150 264 24 18}
  246.       }
  247.       Fl_Value_Output centerfreqvo {
  248.         label {C.f.}
  249.         callback {o->value(respar->getcenterfreq()/1000.0);}
  250.         tooltip {Center Frequency (kHz)} xywh {210 264 33 18} when 3 minimum 1 maximum 10 step 0.01 value 1 textfont 1
  251.         code0 {o->value(respar->getcenterfreq()/1000.0);}
  252.       }
  253.       Fl_Value_Output octavesfreqvo {
  254.         label {Oct.}
  255.         callback {o->value(respar->getoctavesfreq());}
  256.         tooltip {No. of octaves} xywh {210 282 33 18} when 3 minimum 1 maximum 127 step 1 value 30 textfont 1
  257.         code0 {o->value(respar->getoctavesfreq());}
  258.       }
  259.       Fl_Button {} {
  260.         label RND2
  261.         callback {respar->randomize(1);
  262. resonancewindow->redraw();
  263. redrawPADnoteApply();}
  264.         tooltip {Randomize the resonance function} xywh {566 276 42 12} box THIN_UP_BOX labelfont 1 labelsize 10
  265.       }
  266.       Fl_Button {} {
  267.         label RND1
  268.         callback {respar->randomize(0);
  269. resonancewindow->redraw();
  270. redrawPADnoteApply();}
  271.         tooltip {Randomize the resonance function} xywh {566 264 42 12} box THIN_UP_BOX labelfont 1 labelsize 10
  272.       }
  273.       Fl_Button {} {
  274.         label RND3
  275.         callback {respar->randomize(2);
  276. resonancewindow->redraw();
  277. redrawPADnoteApply();}
  278.         tooltip {Randomize the resonance function} xywh {566 288 42 12} box THIN_UP_BOX labelfont 1 labelsize 10
  279.       }
  280.       Fl_Check_Button p1st {
  281.         label {P.1st}
  282.         callback {respar->Pprotectthefundamental=(int) o->value();
  283. redrawPADnoteApply();}
  284.         tooltip {Protect the fundamental frequency (do not damp the first harmonic)} xywh {365 285 45 15} down_box DOWN_BOX labelsize 10
  285.         code0 {o->value(respar->Pprotectthefundamental);}
  286.       }
  287.       Fl_Button {} {
  288.         label InterpP
  289.         callback {int type;
  290. if (Fl::event_button()==FL_LEFT_MOUSE) type=0;
  291.        else type=1;
  292. respar->interpolatepeaks(type);
  293. resonancewindow->redraw();
  294. redrawPADnoteApply();}
  295.         tooltip {Interpolate the peaks} xywh {365 265 46 15} box THIN_UP_BOX labelfont 1 labelsize 10
  296.       }
  297.       Fl_Dial centerfreq {
  298.         label {C.f.}
  299.         callback {respar->Pcenterfreq=(int)o->value();
  300. centerfreqvo->do_callback();
  301. rg->redraw();
  302. redrawPADnoteApply();}
  303.         xywh {245 265 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
  304.         code0 {o->value(respar->Pcenterfreq);}
  305.         class WidgetPDial
  306.       }
  307.       Fl_Dial octavesfreq {
  308.         label {Oct.}
  309.         callback {respar->Poctavesfreq=(int)o->value();
  310. octavesfreqvo->do_callback();
  311. rg->redraw();
  312. redrawPADnoteApply();}
  313.         xywh {280 265 30 30} box ROUND_UP_BOX labelsize 11 maximum 127 step 1
  314.         code0 {o->value(respar->Poctavesfreq);}
  315.         class WidgetPDial
  316.       }
  317.       Fl_Button {} {
  318.         label C
  319.         callback {presetsui->copy(respar);}
  320.         xywh {625 275 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 12 labelcolor 7
  321.       }
  322.       Fl_Button {} {
  323.         label P
  324.         callback {presetsui->paste(respar,this);}
  325.         xywh {655 275 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 12 labelcolor 7
  326.       }
  327.       Fl_Button applybutton {
  328.         label Apply
  329.         callback {applybutton->color(FL_GRAY);
  330. applybutton->redraw();
  331. if (cbapplywidget!=NULL) {
  332.     cbapplywidget->do_callback();
  333.     cbapplywidget->color(FL_GRAY);
  334.     cbapplywidget->redraw();
  335. };}
  336.         xywh {690 265 85 15} box THIN_UP_BOX labelfont 1 labelsize 12
  337.       }
  338.     }
  339.   }
  340.   Function {ResonanceUI(Resonance *respar_)} {} {
  341.     code {respar=respar_;
  342. cbwidget=NULL;
  343. cbapplywidget=NULL;
  344. make_window();
  345. applybutton->hide();} {}
  346.   }
  347.   Function {~ResonanceUI()} {} {
  348.     code {resonancewindow->hide();} {}
  349.   }
  350.   Function {redrawPADnoteApply()} {} {
  351.     code {if (cbwidget!=NULL) {
  352.     cbwidget->do_callback();
  353.     applybutton->color(FL_RED);
  354.     applybutton->redraw();
  355. };} {}
  356.   }
  357.   Function {setcbwidget(Fl_Widget *cbwidget,Fl_Widget *cbapplywidget)} {} {
  358.     code {this->cbwidget=cbwidget;
  359. this->cbapplywidget=cbapplywidget;
  360. rg->setcbwidget(cbwidget,applybutton);
  361. applybutton->show();} {}
  362.   }
  363.   Function {refresh()} {} {
  364.     code {redrawPADnoteApply();
  365.  
  366. enabled->value(respar->Penabled);
  367.  
  368. maxdb->value(respar->PmaxdB);
  369. maxdbvo->value(respar->PmaxdB);
  370.  
  371. centerfreqvo->value(respar->getcenterfreq()/1000.0);
  372. octavesfreqvo->value(respar->getoctavesfreq());
  373.  
  374. centerfreq->value(respar->Pcenterfreq);
  375. octavesfreq->value(respar->Poctavesfreq);
  376.  
  377. p1st->value(respar->Pprotectthefundamental);
  378.  
  379. rg->redraw();} {}
  380.   }
  381.   decl {Resonance *respar;} {public
  382.   }
  383.   decl {ResonanceGraph *rg;} {}
  384.   decl {Fl_Widget *cbwidget,*cbapplywidget;} {}
  385.